import requests

from get_config import get_token


import pandas as pd
import re

import pandas as pd
import re


def export_to_excel(data_list, output_file='凭证汇总表.xlsx'):
    """
    将财务数据导出到Excel文件

    参数:
        data_list: 包含多个字典的列表，每个字典包含accountCode, accountName, amountDr, amountCr
        output_file: 输出Excel文件名 (默认: 'account_data.xlsx')
    """
    # 检查数据是否为空
    if not data_list:
        raise ValueError("数据列表为空，无法导出Excel")

    # 数据清洗和转换
    processed_data = []
    for item in data_list:
        # 使用get方法安全获取accountCode，如果不存在则使用空字符串
        account_code = item.get('accountCode', '')

        # 使用get方法安全获取accountName，如果不存在则使用空字符串
        account_name = item.get('accountName', '')

        # 清理金额字段（移除逗号和空格）
        clean_dr = re.sub(r'[^\d.]', '', item['amountDr']) or '0.00'
        clean_cr = re.sub(r'[^\d.]', '', item['amountCr']) or '0.00'

        # 转换为浮点数（用于Excel数值格式）
        try:
            dr_value = float(clean_dr)
            cr_value = float(clean_cr)
        except ValueError:
            dr_value = 0.0
            cr_value = 0.0

        processed_data.append({
            '科目编号': account_code,
            '科目名称': account_name,
            '借方金额': dr_value,
            '贷方金额': cr_value
        })

    # 创建DataFrame
    df = pd.DataFrame(processed_data, columns=['科目编号', '科目名称', '借方金额', '贷方金额'])

    # 设置Excel格式（保留两位小数）
    with pd.ExcelWriter(output_file, engine='openpyxl') as writer:
        df.to_excel(writer, index=False, sheet_name='财务数据')


    print(f"Excel文件已生成: {output_file}")
    return output_file

def query_zb(start_year, start_month, end_year, end_month, token,
             page_size=10000000, current_page=1,
             begin_account_grade=1, end_account_grade=5,
             stop_account_not_show=False):
    """
    查询财务账目数据

    参数:
        start_year: 开始年份 (str, 例如 "2022")
        start_month: 开始月份 (str, 例如 "01")
        end_year: 结束年份 (str, 例如 "2025")
        end_month: 结束月份 (str, 例如 "08")
        token: 有效的认证token (用于解决401未登录问题)
        page_size: 每页数量 (默认50)
        current_page: 当前页码 (默认1)
        begin_account_grade: 开始会计等级 (默认1)
        end_account_grade: 结束会计等级 (默认1)
        stop_account_not_show: 是否显示停止账户 (默认False)

    返回:
        dict: 解析后的JSON响应 (包含result和error信息)
    """
    url = "https://jcdz.jcszfw.com/v1/cw/zb/pzhzb/query"

    # 构造请求参数 (确保所有值为字符串/布尔类型)
    payload = {
        "startYear": str(start_year),
        "startMonth": str(start_month).zfill(2),  # 确保月份为2位数
        "endYear": str(end_year),
        "endMonth": str(end_month).zfill(2),
        "pageSize": int(page_size),
        "currentPage": int(current_page),
        "beginAccountGrade": int(begin_account_grade),
        "endAccountGrade": int(end_account_grade),
        "stopAccountNotShow": bool(stop_account_not_show)
    }

    # 设置请求头 (关键: 添加认证token)
    headers = {
        "Token": f"{token}",  # 401问题的关键解决方式
        "Content-Type": "application/json"
    }

    try:
        response = requests.post(url, json=payload, headers=headers)
        response.raise_for_status()  # 检查HTTP错误状态
        return response.json()
    except requests.exceptions.RequestException as e:
        # 处理网络/HTTP错误
        return {"result": False, "error": {
            "code": "REQUEST_ERROR",
            "message": str(e),
            "details": str(e.response.text if e.response else "")
        }}


# 使用示例
if __name__ == "__main__":

    result = query_zb(
        start_year="2021",
        start_month="01",
        end_year="2025",
        end_month="09",
        token=get_token()
    )

    print("请求结果:", result)
    if result.get("result", False):
        print("数据获取成功!")
        data_list = result['value']['details']
        print(data_list)
        export_to_excel(data_list)



    else:

        print("请求失败:", result.get("error", {}).get("message", "未知错误"))
